home *** CD-ROM | disk | FTP | other *** search
-
- MDCD Version 1.0 - 10/24/88 - File Compression and DeCompression Program
-
- This documentation is organized in the following order, under the
- following headings:
-
- WHAT IS IT ?
- WHAT ISN'T IT ?
- WHY WAS IT WRITTEN ?
- HOW CAN I USE IT ?
- WHAT ARE THE RESTRICTIONS ?
- CONCERN # 1
- CONCERN # 2
- CONCERN # 3
- CONCERN # 4
- MDCD GENERAL INFORMATION & FEATURES
- MDCD COMPRESS OPTION
- MDCD DECOMPRESS OPTIONS
- MDCD LIST OPTIONS
- MDCD FUTURE RELEASES
- SOFTWARE DESCRIPTION
- WRITING YOUR OWN PROGRAMS
- THE COMPRESSION ALGORITHM
- MISCELLANEOUS INFO
- LIABILITY
- DISCLAIMERS
- ACKNOWLEDGEMENTS
- WHERE CAN I GET THE MOST RECENT COPY OF THE SOFTWARE ?
- WHERE CAN I CONTACT THE AUTHOR ?
-
-
- WHAT IS IT ?
-
- MDCD 1.0 is the first release of a file compression and
- decompression program that compresses data using a 13 bit LZW
- algorithm. It was written in Turbo Pascal and requires the
- Turbo Pascal 5.0 compiler. Portions are written in 808x
- assembler and require Turbo Assembler 1.0 or MASM 3.0+.
-
- It is not as fast as PKWARE products but compresses almost as
- well. It is significantly faster and compresses better than
- the only version of ARC that I could find to compare it
- against (version 5.20).
-
- It demonstrates some interesting differences when compared to
- current file compression/decompression programs. I will talk
- about the differences in a bit, but first I want to talk
- about what it is not...
-
-
- WHAT ISN'T IT ?
-
- It is not a replacement for PKWARE/SEA products. It is not a
- solution to the ARC wars that currently have (to mention a
- few) BBS Sysops, telecommunications networks and PC users in
- general in total disarray. It is not meant to show off my
- computer knowledge as I am terrible when it comes to math,
- and have only a simplistic understanding of the compression
- algorithm involved.
-
- You are probably asking yourself, "Then why was it written" ?
- I shall explain...
-
-
- WHY WAS IT WRITTEN ?
-
- I write commercial PC software for a living. This includes a
- specialized communications program, a telephone call
- accounting system and several clients that require low level
- systems programming. The communications program uses
- compression in the process of preparing files for
- transmission. The call accounting system is rather large and
- I need to reduce disk storage and increase reliability when
- shipping and installing. I also like to have an orderly
- method of keeping track of various releases and revision
- levels of this software.
-
- I did not want to pay an exorbitant fee to license
- compression technology from a third party. Not only is this
- cost prohibitive for someone trying to make a simple living,
- but it is nearly impossible to get
- something that can be tailored to ones own needs. You are
- stuck with a program that more than likely requires more disk
- space, or gobbles up more quantities of memory than you care
- to relinquish.
-
- So, I wrote my own. It is written for my needs. It uses
- minimal memory. It requires no disk work area. It allows me
- to remember the exact path that a file was compressed from.
- It lets me store comments about the file. It lets me keep
- duplicate file names in a compressed file, retaining their
- real-time chronological order. It lets me remember the
- original file's date, time and size. It allows me to retain
- a file's original attributes so that if it is a hidden,
- system, read only file before compression, it will be
- likewise after. It allows me to simply group files together
- in a single area and doesn't waste time trying to compress
- already compressed .ARC or .ZOO files. It serves my exact
- needs and is written for me, a commercial software author, to
- facilitate control and distribution of software.
-
- I wrote it for one other express purpose. I continually grow
- in my programming abilities. I have been programming
- computers for over 20 years and can't think of any period in
- my career where I wasn't constantly increasing my knowledge
- and awareness of current computer technology. This has
- happened at a fairly logical pace for most of my programming
- life... Until I discovered the crazy world of
- telecommunications/public domain/shareware/BBS'ing/networks in
- the sky/etc./etc.
-
- This crazy world has increased my knowledge, solved my
- day-to-day technical problems, provided my with one heck of a
- lot of fun and exposed me to computer technology at a rate I
- would never have believed possible. I have learned from the
- generosity of others sharing their knowledge, experience and
- brilliance and I want to attempt to repay that in kind.
-
- "So", you ask yourself, "how can I use this software?"
-
-
- HOW CAN I USE IT ?
-
- You can use it in any way that it serves your needs, providing
- you adhere to a couple of restrictions I will talk about in a
- minute. I am including all of the source code. If you are a
- shareware, or commercial software author, you could probably
- use it in many of the ways I mentioned above. Some ideas that
- come to mind:
-
- A communications program compression of files prior to
- transmission. Graphics compression while saving to disk.
- Word processor document compression. Distributing products
- in compressed format and reliably determining a successful
- installation. Personal file compression program.
- Maintaining version/release control of software products,
- word processing documents, or just about anything. To
- mention a few!
-
- "Hmmmmm, sounds like I could use this, but what ARE those
- restrictions ?"
-
-
- WHAT ARE THE RESTRICTIONS ?
-
- I toyed with the idea of copyrighting this software. I
- wanted to somehow have a means to control the few
- restrictions & requests that I had decided on. But that
- seemed kind of silly, and basically unenforceable. I was
- modifying a brilliant algorithm (which I do not understand),
- written by someone else (who had placed the code in the
- public domain) and adding some simple stuff to move some
- files around and keep track of basic information. And on top
- of that I was releasing the source to the general public,
- virtually no strings attached! I figured that I would get
- thrown out by any court trying to decide if my copyright was
- enforceable, especially if the proprietary source code was
- made available to all. So... NO COPYRIGHT.
-
- I have three restrictions. All are unenforceable legally, one
- is enforceable morally, the other two are enforceable by virtue
- of the media in which this is distributed.
-
- Restriction 1: If you use this code as part of a product that
- you gain monetarily from, I will be considered a "registered"
- user of that product, with all related privileges. In other
- words, you send me current releases of your product. If you
- have a BBS that supports your product and charge a related
- fee, I will be able to use it. If you have a quarterly
- newsletter, I will receive a copy. I consider this enforceable
- morally as I find it difficult to believe that any shareware
- or commercial organization would prohibit unauthorized use of
- their own software and yet violate this principle in using
- other's software against stated restrictions. (is he naive,
- you ask?)
-
- Restriction 2: You may not use this code to create a product
- that competes with existing compression programs, shareware or
- otherwise. I do not want to be part of, or contribute to, the
- mass confusion that currently exists over conflicts between
- SEA and PKWARE. I will not delve into this issue in this
- document, but please KNOW that I see RED every time I think of
- the grief and chaos that this issue is causing a whole world
- full of users. This is somewhat enforceable in two ways.
- Number 1, if you are discovered by the public in general, your
- product will not be supported, and number 2, if I find out
- about it, I will make it common knowledge on every BBS and
- major network in this country. And believe me, tenacity and
- relentless are my two middle names. (yup... he's naive!)
-
- Restriction 3: If you distribute this software, don't charge
- for it. Charges for postage & handling (that are in line with
- currently prevailing rates for shareware & public domain
- software) or connection and access charges to commercial
- networks or pay BBS's are excluded from the "don't charge for
- it" portion of this restriction. Make sure that it is
- distributed in the same form that you received it in. Do not
- remove or modify any of the files. This is enforceable in the
- same manner as restriction 2 discussed above.
-
- "Okay, I want to use it, and I agree to the restrictions,
- ... BUT I have some concerns".
-
-
-
- CONCERN # 1
-
- "I am concerned about the legality of using this software."
-
- If you have second thoughts about using this software in your
- commercial or shareware products, and are worried about not
- REALLY having my permission, write me a letter stating that
- you would like express permission to use this software, and
- state that you will adhere to the restrictions outlined above.
- I will send you my permission on (what do they call that
- stuff?? oh yeh..) paper giving you the authority to use the
- programs in any way you see fit.
-
-
- CONCERN # 2
-
- "I'm not sure I'm up to modifying this compression stuff."
-
- If you're not sure you want to get into the complexities of
- writing or adapting compression technology to your software
- products, I will make myself available to you (after all, this
- IS how I feed my rug rats!) on a consulting basis. While
- generating direct revenue was not a consideration for creating
- this product, I would rather enjoy the task of adapting this
- software in unique areas.
-
-
- CONCERN # 3
-
- "Does this stuff really work?"
-
- I have tested it as extensively as I can. That means that the
- first person to try it will probably find everything I missed,
- and then some. I have also had 5 other people putting it
- through its paces. So far, no problems. I have included
- extensive disk error checking. Throughout the entire
- development process, I did not once wipe out any of my disk
- files, or create any cross-linked clusters, and most of the
- disk I/O is done in assembler. I attribute this to 1)
- starting with an working public domain program, 2) extensive
- disk error checking, 3) Turbo Pascal's extensive error
- checking, and 4) extreme caution and care on my part.
-
-
- CONCERN # 4
-
- "I've heard about them VIRII. Am I taking a chance?"
-
- All of the source code is included. Look at it, recompile it
- yourself, and test it in your own carefully created
- environment.
-
-
- MDCD GENERAL INFORMATION & FEATURES
-
- MDCD has three basic functions. It allows you to compress a
- file or files, decompress a previously compressed file or
- list the directory of files contained within a compressed
- file.
-
- Typing MDCD with no parameters or entering an invalid command
- will display a help screen.
-
- MCDC is a program that provides a fairly functional
- compress/decompress program. It was written to test and
- exercise the core routine that does that actual
- compression/decompression (MDCD1213.ASM). The source code
- provides excellent examples for writing your own compression
- program or routines.
-
- Some of the features, and lack thereof are:
-
- - Uses 13 bit LZW compression.
-
- - Original file date, time, and attributes are preserved.
-
- - Compress file extensions default to .MD if not specified.
-
- - Files added to an existing Compress file are appended to
- the end of the file.
-
- - Because duplicate files are allowed, and because files are
- added in physical order, an inherent ability to keep a
- chronological backups of files is available.
-
- - File headers are added in the order that files are added to
- the Compress file. Therefore Compress file directory lists
- will not be in alphabetical order as you are probably used
- to. They will be in the same order that you added files to
- the Compress file.
-
- - No external disk work space is required for any functions.
-
- - The program is fairly small. 39k for Code, 1k for Date, 3k
- for Stack and 45k for heap for a total of 88k. Using 12
- bit compression would reduce the program size by 20k
- requiring 68k total memory.
-
- - The complete drive:path\name is kept for every compressed
- file.
-
- - 122 bytes of overhead is incurred for each file stored in a
- compress file. Most of this is for the original
- drive:\path\name. I chose to do this on the first release
- because having this information available is much more
- valuable than the related disk space required.
-
- - If a file does not compress smaller than the original, it
- is stored as is, retaining its original size.
-
- - .ZOO and .ARC files are automatically recognized, and no
- attempt at compression is performed. The file is stored as
- is.
-
- - Conventional DOS wildcards may be used when specifying
- files to be compressed.
-
- - MDCD will not inadvertently try and compress the file that
- is currently being output to.
-
- - MDCD will, at this time, only decompress an entire Compress
- file.
-
-
-
-
- MDCD COMPRESS OPTION
-
- This option allows you to compress a single or multiple
- files. You can compress to a new file, or existing file.
- Additions are always made to the end of the file. The
- compress file may contain exact duplicate
- drive:\path\filenames. If you attempt to compress to an
- existing file, a validity check is made prior to any physical
- writing to the file. If it is determined not to be a
- compress file, you will be informed and the program will
- terminate. Three (3) parameters are required:
-
- Parameter 1: This parameter always contains the option. In
- the case of compression it must be 'C'.
-
- Parameter 2: File to be compressed. This may contain a
- complete drive:\path\ name in front of the file name. If no
- drive: or path\ is specified, the currently directory will
- be searched. Valid DOS wild cards are allowed.
-
- Parameter 3: File to contain the compressed input file. If
- pre-existing, it must be a valid compress file. If not
- found, it will be created. It may contain a complete
- drive:\path\name in front of the file name. The drive:\path\
- is verified for existence. If no drive: or path\ is
- specified, the currently directory will be used. If no file
- extension is specified, the extension of .MD will be
- appended. If you wish no file extension for the file, end
- your file name with a period. e.g. [COMPFILE.].
-
-
- MDCD DECOMPRESS OPTIONS
-
- There are two different decompress options allowing the
- decompression of all files in an existing compress file.
- They are identical except that the 'D' option will pause and
- prompt you if it encounters an existing file of the same name
- as one it is about to decompress. The 'R' option will
- automatically 'R'eplace any files it decompresses, informing
- you with a message, but no pause.
-
- If you attempt to decompress a nonexisting file, you will be
- informed. if you attempt to decompress an existing file, a
- validity check is made. If it is determined not to be a
- compress file, you will be informed and the program will
- terminate. Two (2) or three (3) parameters may be specified:
-
- Parameter 1: This parameter always contains the option. In
- the case of decompression, it must be 'D' or 'R'. Specifying
- 'D' will cause a pause and prompt to occur if the program
- attempts to decompress a file that currently exists. You may
- respond with 'Y'es to replace the file or any other key to
- ignore the file and go on. Specifying 'R' will automatically
- replace any pre-existing files encountered.
-
- Parameter 2: File to be decompressed. This may contain a
- complete drive:\path\ name in front of the file name. If no
- drive: or path\ is specified, the currently directory will
- be searched. If no file extension is specified, the
- extension of .MD will be appended. If you wish no file
- extension for the file, end your file name with a period.
- e.g. [COMPFILE.].
-
- Parameter 3: Drive:\path to contain the decompressed output
- files. This parameter may be left blank, in which case files
- are decompressed to the current directory. if a drive:\path\
- is entered, it is verified for existence. one slight problem
- exists when specifying the path. If you specify an output
- drive:\path to decompress to and it is specifying other than
- that root directory, you must leave off the trailing '\'. In
- other words, if you want to decompress to the root directory
- of your C: drive, enter c:\ - if you want to decompress to a
- subdirectory off your root directory on your c: drive, enter
- C:\SUBDIR - do NOT enter c:\subdir\. I will fix this in the
- next release.
-
-
- MDCD LIST OPTIONS
-
-
- There are two different list options. they both allow you to
- display a directory of all of the files in an existing
- compress file. They are identical except that the 'l' option
- displays original file date and time information and the 'F'
- option displays the original file drive:\path\ in its place.
-
- If you attempt to list a nonexisting file, you will be
- informed. if you attempt to list an existing file, a
- validity check is made. if it is determined not to be a
- compress file, you will be informed and the program will
- terminate. Two (2) parameters are required:
-
- Parameter 1: This parameter always contains the option. In
- the case of list, it must be 'l' or 'f'. both options will
- display a directory of all compressed files contained in a
- compress file. Specifying option 'l' will cause the original
- file's date and time to be displayed. specifying option 'F'
- will cause the original file's drive:\path to be displayed
- instead of the date/time.
-
- Parameter 2: File to be listed. this may contain a complete
- drive:\path\ name in front of the file name. If no drive:
- or path\ is specified, the currently directory will be
- searched. If no file extension is specified, the extension
- of .MD will be appended. if you wish no file extension for
- the file, end your file name with a period. e.g.
- [COMPFILE.]. Wildcards can not be currently used to specify
- multiple compress files to be listed. This will be addressed
- in the next release.
-
- Output may be redirected with the > and >> redirection
- symbols.
-
-
- Example of entering: MD L LZ
-
- Compressed File: LZ.MD
-
- ORIG CMP HDR cmp cmp prg
- FILE NAME SIZE SIZE LEN pct typ ver crc date TIME
- -------------------------------------------------------------------------
- LZ.TXT 3615 1965 122 45% lzw13 10 ecae 07-01-86 13:23:56
- LZCOMP.ASM 7261 3703 122 48% lzw13 10 fc76 07-01-86 14:02:44
- LZCOMP.EXE 3607 678 122 80% lzw13 10 a6ce 07-01-86 14:04:24
- LZDCMP.ASM 6094 3152 122 47% lzw13 10 4c26 07-01-86 14:02:12
- LZDCMP.EXE 3620 670 122 80% lzw13 10 8d01 07-01-86 14:04:18
- MACROS.MLB 6422 2345 122 62% lzw13 10 45ca 06-30-86 14:12:34
- ------ ------ ----- --
- 30619 12513 732 59%
-
-
-
- Example of entering: MD F LZ
-
- Compressed File: LZ.MD
-
- ORIG CMP HDR cmp cmp prg
- FILE NAME SIZE SIZE LEN pct typ ver crc original pATH
- -------------------------------------------------------------------------
- LZ.TXT 3615 1965 122 45% lzw13 10 ecae j:\lzw\original\
- LZCOMP.ASM 7261 3703 122 48% lzw13 10 fc76 j:\lzw\original\
- LZCOMP.EXE 3607 678 122 80% lzw13 10 a6ce j:\lzw\original\
- LZDCMP.ASM 6094 3152 122 47% lzw13 10 4c26 j:\lzw\original\
- LZDCMP.EXE 3620 670 122 80% lzw13 10 8d01 j:\lzw\original\
- MACROS.MLB 6422 2345 122 62% lzw13 10 45ca j:\lzw\original\
- ------ ------ ----- --
- 30619 12513 732 59%
-
-
- MDCD FUTURE RELEASES
-
- MDCD will be an evolving product. Items that are on my to do
- list to be addressed are:
-
- - Ability to sort several ways when doing a compress file
- directory list.
-
- - Various length header records to allow a smaller header
- record without the drive:\path\, one to allow a file
- comment to be attached to each file and one to allow a file
- description to be attached to each file (variable length).
-
- - Ability to override file compression and force file(s) to
- be stored directly.
-
- - Ability to disable the saving/restoring of original file
- attributes.
-
- - Ability to compress and decompress an entire disk(ette), or
- sub-directory and all lower level sub-directories,
- maintaining original disk(ette) structure.
-
- - Ability to force decompression to the original
- drive:\path\.
-
- - Program to allow the creation of self-extracting compress
- files.
-
- - Ability to decompress individual files and selected file(s)
- that have duplicate names.
-
- - Fix the irritation when using append or similar TSR's where
- a file appears to already exist, but doesn't.
-
- - Allow wildcards to be used for decompressing and
- listing multiple Compress files.
-
- - Implement heuristic logic and user specified requests
- allowing the use of both 12 bit and 13 bit compression.
-
- - Change MDCD1213.ASM to allow simpler interface with Turbo C
- and various models.
-
-
- SOFTWARE DESCRIPTION
-
- The compressed file you received should contain the following
- files:
-
- LZ MD 13245 10-26-88 12:52a
- MDCD DOC 43168 10-26-88 12:55a
- MDCD EXE 51107 10-26-88 12:52a
- MDCD PAS 65020 10-26-88 12:52a
- MDCD1213 ASM 60995 10-26-88 12:52a
- MDCD1213 OBJ 3232 10-26-88 12:52a
- TESTC PAS 7546 10-26-88 12:52a
- TESTD PAS 7390 10-26-88 12:52a
- TIMING DOC 7555 10-26-88 12:52a
-
-
- A simple description of each file:
-
- LZ.MD - Original .asm/.exe for lzcomp & lzdcmP.
- Compressed with MDCD.
-
- To see a list of files:
-
- MDcd l lz (show original date/time)
- MDcd f lz (show original path)
-
- To decompress to current subdirectory:
-
- MDcd d lz
-
- MDCD.DOC - Documentation and other information.
-
- MDCD.PAS - Source for MDCD 1.0.
-
- MDCD.EXE - Executable MDCD 1.0.
-
- MDCD1213.ASM - Source for the assembler compress &
- decompress functions.
-
- MDCD1213.OBJ - Linkable module for compress & decompress
- functions.
-
- TESTC.PAS - Simple single file compression illustrating
- the use of MDCD1213.obj assembler module.
-
- TESTD.PAS - Simple single file decompression illustrating
- the use of MDCD1213.obj assembler module.
-
- TIMING.DOC - Timing/compression size comparison between
- MDCD 1.0, PKPAK/PKUNPAK 3.61, and ARC 5.20.
-
-
-
- WRITING YOUR OWN PROGRAMS
-
- MDCD1213.ASM is the compression/decompression algorithm
- routine. It can be compiled with TASM 1.0 or MASM 3.0 and
- up. It creates MDCD1213.obj. it has two routines which may
- be called. These routines are compressfile & decompress
- file. Each is a FAR assembler proc. make sure you identify
- these calls as FAR in your high level language. They are
- both implemented as high level language functions in that
- they pass back a WORD/INT/DW value indicating the success of
- the request. They also pass back a RECORD/STRUCT/STRUCT that
- contains either the compressed file crc and size, or the
- decompressed file crc and size. It is up to the caller to
- determine if the crc is correct. This assumes that the user
- of this routine has implemented his/her own internal file
- structure.
-
- To call CompressFile, or DecompressFile, you need to pass
- several parameters on the stack. The parameters are the same
- for both functions however their meaning is a bit different
- depending on which routine you are calling. For a more
- detailed description of the parameters, see the listing for
- MDCD1213.ASM or look at TESTC.PAS, or TESTD.pas. These
- parameters are described below and are pushed onto the stack
- in the order described:
-
- Parameter 1: This is a valid dos file handle for the input
- file. The file must be currently opened under this handle.
- For CompressFile, this is the individual file to be
- compressed. For DeCompressfile, this is the file that is to
- be decompressed.
-
-
- Parameter 2: This is a valid dos file handle for the output
- file. The file must be currently opened under this handle.
- For CompressFile, this is the compressed output file. For
- DeCompressFile, this is the name that you want to call the
- file after it is decompressed.
-
-
- Parameter 3: This is the LONGINT/LONG/DD value that
- specifies the byte offset within the input file that you want
- to start decompressing at. This is provided so that you may
- include multiple files in a compressed file. See MDCD.PAS
- for an example. MDCD1213.ASM specifies this parameter as two
- word values, but to the caller, it is strictly a double word
- long value. If you are only compressing and compressing
- single files, this value will always be zero (0).
-
-
- Parameter 4: This is a @POINTER/&POINTER/SEGMENT:OFFSET that
- points to a RECORD/STRUCT/STRUCT defined in the callers
- program. MDCD1213.ASM specifies this parameter as two word
- values, but to the high level language caller this is
- strictly a single far pointer. To an assembler programmer,
- the first parameter is the segment and the second parameter
- is the offset. This area will receive return data from
- CompressFile or DeCompressfile. This record needs to contain
- 5 bytes allocated as a WORD/INT/DW and a LONGINT/LONG/DD.
- For CompressFile, the compressed file's crc and size in bytes
- is returned. For Decompressfile, the decompressed file's CRC
- and size in bytes is returned. These structures should look
- something like this, depending on your language:
-
- {--------} /*-----*/
- { PASCAL } /* c */
- {--------} /*-----*/
-
- Type
- ReturnRec = Record struct returnrec {
- FileCrc : Word; int filecrc;
- FileSize : Longint; long filesize;
- end; } returnr;
- Var
- ReturnR : Returnrec;
-
- ;-----------;
- ; ASSEMBLER ;
- ;-----------;
-
-
- returnr struc
- filecrc dw ?
- filesize dd ?
- returnr ends
-
- Parameter 5: This is a WORD/INT/DW containing the segment
- address of a contiguous area of memory used for storing the
- temporary hash table. the size of this area varies depending
- on whether you are using 12 or 13 bit compression, and
- depending on the routine being called:
-
- CompressFile 12bit 20480 bytes
- CompressFile 13bit 40960 bytes
- DeCompressFile 12bit 12288 bytes
- DeCompressFile 13bit 24576 bytes
-
-
- Parameter 6: This is a value indicating the type of
- compression or decompression to be performed. This value
- MUST be 12 for 12 bit or 13 for 13 bit. The values are not
- checked, and an incorrect value will more than likely lunch
- your machine.
-
-
- In the event of a severe error in the MDCD1213.OBJ module,
- control will be passed back to the caller (after cleaning up
- the stack) and a function return code of $ffff/0xffff/0ffffh
- will be returned. The SS & SP, registers and the number of
- parameters on the stack are stored upon entry so that
- MDCD1213.OBJ can unwind itself no matter what routine the
- error occurs in and perform a far jump back to the caller.
-
- For a simple example of using MDCD1213.OBJ see the included
- files TESTC.PAS and TESTD.PAS. TESTC.PAS allows you to
- compress a file by entering:
-
- TESTC [uncompressed_file_name] [compressed_file_name]
-
- TESTD allows you to decompress a file by entering:
-
- TESTD [compressed_file_name] [uncompressed_file_name]
-
- NOTE: MDCD1213.ASM needs to be changed to interface with
- Tubro C. It currently is model sensitive and the parameters
- would have to be passed backwards, or with pascal calling
- conventions. The segment names would have to also agree to
- Turbo C conventions.
-
-
-
- THE COMPRESSION ALGORITHM
-
- The compression algorithm is contained in MDCD1213.ASM. It is
- an extensively modified version of Tom Pfau's LZCOMP & LZDCMP
- programs written in 808x assembler. It provides for 12 bit
- and 13 bit LZW compression. Tom's original programs are
- contained in this download.
-
- Tom's original source implemented the Lempel-Ziv-Welch 12 bit
- compression with non-repeat packing. The initial size of the
- code started at 9 bits and proceeded to a maximum code size
- of 12 bits. Once the number of codes exceeded the current
- code size, the number of bits was increased. When the table
- filled (4096 entries), a clear code was transmitted for the
- decompression routine and the table re-initialized, starting
- over at 9 bits. The maximum of 12 bits allowed 4096 codes.
- This algorithm is referred to as "Crunched" (note the UPPER
- case 'C') in several compression programs.
-
- I modified the code to also allow for a maximum of 13 bits, or
- 8192 codes. Other than that, it is identical to 12 bit
- compression. This algorithm is referred to as "Squashed" in
- several compression programs.
-
- The original source of the algorithm is from the article "A
- Technique for High Performance Data Compression" by Terry A.
- Welch which appeared in IEEE Computer Volume 17, Number 6
- (June 1984), pp 8-19.
-
-
- MISCELLANEOUS INFO
-
- MDCD1213.ASM uses the same 16 bit CRC used by communications
- programs.
-
- If MDCD1213.ASM encounters a corrupted file during
- decompression, or if invalid parameters are passed to it
- (e.g. 12 bit when it was actually compressed using 13 bit),
- your machine will probably go to lunch. I will work on
- trying to recognize these problems and finding a solution
- that allows for a graceful exit.
-
- All of the included source code is HEAVILY commented... Maybe
- even excessively. This should help to make it more
- understandable for anyone attempting to utilize it in their
- own software tools.
-
- My tests of the 12 vs. 13 bit compression show that .EXE
- files are an average of 1/2 of 1% smaller using 12 bit.
- Most other files, especially text type files will be anywhere
- from 4% - 7% larger. This is why I chose to implement the 13
- bit LZW compression option in MDCD.
-
-
-
- LIABILITY
-
- LIMIT OF LIABILITY
-
- MDCD and its related source code is distributed as-is. The
- author disclaims all warranties, expressed or implied. The
- author will assume no liability for damages either from the
- direct use of this product or as a consequence of the use of
- this product.
-
-
-
- DISCLAIMERS
-
- I have NOT looked at the source code for ARC, ZOO, DWC or any
- other file compression programs other than the original
- LZCOMP/LZDCMP assembler code, in the process of designing or
- programming this software. I have not used any existing ARC,
- ZOO or DWC documentation to assist in the design of file
- formats or file stowage methodologies. I have purposefully
- avoided any likeness to existing file compression programs
- that I have knowledge of. I have used the command line to
- pass parameters to my program. If THIS ever becomes a
- "look-and-feel" issue, we are ALL in big trouble.
-
- I HAVE looked at hex dumps of both ARC and ZOO files to
- determine how to identify them as such, so that I can avoid
- the compression cycle and subsequently store the file. This
- is limited to finding a commonality that identifies these
- files, and in both cases, is determined by the file
- extension, along with the first character stored in the file.
- This information was NOT garnered from ARC/ZOO file
- documentation.
-
- This program will NOT extract files from ARC or ZOO files or
- compress files into existing ARC or ZOO files. It WILL store
- an ARC or ZOO file into my .MD files as it will ALL files.
-
-
-
- ACKNOWLEDGEMENTS
-
- We walk on the shoulders of others that came before us, or
- however that old cliche goes.. I want to acknowledge several
- people who have contributed directly or indirectly to this
- program; most, if not all of whom have never heard of me.
- Please forgive any omissions:
-
- Terry A. Welch, for the compression algorithm.
-
- Tom Pfau, for LZCOMP & LZDCMP.
-
- SEA & PKWARE (in a convoluted way), for creating the
- atmosphere that "incited" me to write this thing.
-
- TurboPower Software, for the highest quality programming tools
- and a refreshingly unique commitment to professionalism and
- business practices.
-
- Jerry D. Stuckle for the ASYNC.ASM tutorial, from which I
- learned 808x assembly and the 8250.
-
- Phil "PIB" Burns for PIBTERM, from which I learned many
- excellent Turbo Pascal techniques and overcame communications
- hurdles.
-
- Ray Duncan for "Advanced MSDOS Programming", Microsoft Press,
- without which, life would have been much more complex.
-
- Jim Kyle, Chip Rabinowitz, Ray Duncan & other contributors to
- "The MS-DOS Encyclopedia", Microsoft Press, a formidable
- reference to Ms. DOS and all her idiosyncracies.
-
- Neil Rubenking, for once helping me with a simple (to him),
- yet insoluble (to me) problem, saving me untold hours.
-
- Philippe Kahn and Borland International (a deity??) for
- consistently producing the highest quality software, and the
- most reasonable prices, and providing support to boot! (Thank
- you CIS and BPROGA)
-
- And.. last, but not least (don't the wife and kids ALWAYS
- come last ?, just ask'm!)
-
- Emilie, Matthew, Michelle and Melissa, for putting up with my
- idiosyncracies, long hours, and my mistress: the computer.
-
-
-
- WHERE CAN I GET THE MOST RECENT COPY OF THE SOFTWARE ?
-
- The software will be evolving. Current copies may be obtained
- from:
-
- (preferred)
-
- 1. Amiga Techniques + PC Tech BBS - (GT POWER)
- (209) 298-8453 - 1200-9600 HST (24 hours)
-
- 2. Compuserve
- (BPROGA, IBMPRO, IBMAPP, PCMAGNET, CONSULT, PROGFORUM)
-
- 3. EXEC PC BBS
-
- (if you're desperate)
-
- 4. Send a self-addressed, postage paid mailer to me
- plus $1.00 for diskette.
-
- 5. Send $3.00 and I will provide the diskette and postage.
- Please don't request FED-EX or UPS.
-
-
-
- WHERE CAN I CONTACT THE AUTHOR ?
-
- I may be contacted (in order of preference) at the locations
- (electronic or otherwise) listed below:
-
- Amiga Techniques + PC Tech BBS - (GT POWER)
- (209) 298-8453 - 1200-9600 HST (24 hours)
- Directly or through NET mail node 014/000.
-
- CIS: 76676,1362
- (BPROGA, IBMPRO, IBMAPP, PCMAGNET, CONSULT, PROGFORUM)
- (BPROGB, IBMSYS, IBMCOM)
-
- GENIE: MDAVENPORT
-
- Mike Davenport
- Mike Davenport & Associates
- 6751 N. Blackstone Ave. Suite 252
- Fresno CA 93710
-
- Voice: (209) 298-8846
-